
var stoon = {
	aa : "aa",
	bb : "bb",
	cc : 1,
	dd : {
		bb:"ddd"
	}
	
}

var result = stoon.cc || "없어."; // || 연산자를 통해 기본값을 설정할수있다.
console.log(result);

//console.log(stoon.vv && stoon.bb);
/*속성값갱신*/
stoon.cc = {
		cc1 : "cc1",
		cc2 : "cc2"
}

console.log(stoon.cc.cc1);

/*객체는 참조값을 전달되고 결코 복사되지 않는다.*/
var newSton = Object.create(stoon);
newSton.cc='cccc';
stoon.cc.cc1 ="ccc1";
newSton.cc.cc1="ccc222";
console.log(stoon.cc.cc1);

if(typeof Object.create !== "function" ){
	Object.create = function(e){
		var F = function(o){};
		F.prototype = o;
		alert(F.prototype);
		return new F();
	}
}

var annother = Object.create(stoon);
console.log(stoon.hasOwnProperty('bb')); //프로토타입(속성) 이 정확하게 있는지~ (treu)
console.log(stoon.hasOwnProperty('number')); //프로토타입(속성) 이 정확하게 있는지~ (false)

/*hasOwnProperty <- 프로토타입 체인을 바라보지 않는다.
프로토타입 체인 : 객체의 트로토타입 연결 전체를 프로토토입 체인이라함.*/

for( key in stoon){
	if(typeof stoon[key] !== 'function'){
		document.writeln( key + " /"+stoon[key]);
	}
}
var pr = [
		'aa','bb','cc'
]
for(var i=0; i<pr.length ;i++){
	document.writeln(pr[i] +" : "+ stoon[pr[i]]);
}
console.log(newSton.cc);
delete newSton.cc;
console.log(newSton.cc);
/*Object.create 되었을때 본인의 프로퍼티가 삭제되면 원래 상속받았던 프로퍼티의 같은 이름으로 대체된다. */

console.clear();
//생성자 함수 생성. 이 함수는 status라는 속성을 가진 객체를 생성.
var Quo = function(string){
	var that=this;
	that.status = string; //객체생성.
}

Quo.prototype.get_status = function(){
	return this.status;
}

//Quo 의 인스턴스를 생성.
var myQuo = new Quo("confused");
//console.log(myQuo.get_status());
var statusObject = {
		
		status : "a-ok"
};
var status = myQuo.get_status.apply(statusObject);
console.log(this.status);






